#include <bits/stdc++.h>
using namespace std;
template<typename T>void read(T &x){
    x=0;char c=getchar();int f=1;
    for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
    for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
    x*=f;
}

#define ll long long
const int maxn=1e5+10;
int n,m,k;
int A[maxn];
int a[maxn],c[maxn];
char s[20][maxn];

int h[maxn],top=0,sum=0;
void dfs(int u,int k)
{
    if(u>k)
    {
        sum+=h[top];
        return ;
    }
    for(int i=2;i<=top;i+=2)
    {
        if(s[u][i/2]=='0')
        {
            if(a[h[i-1]]>=u)h[i/2]=h[i-1];
            else h[i/2]=h[i];
        }
        else
        {
            if(a[h[i]]>=u)h[i/2]=h[i];
            else h[i/2]=h[i-1];
        }
    }
    top/=2;
    dfs(u+1,k);
}
ll solve(int len)
{
    int k=log2(len);
    if(pow(2,k)==len)
    {
        top=0;sum=0;
        for(int i=1;i<=len;i++)h[++top]=i;
        dfs(1,k);
    }
    return sum;
}

int main()
{
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    read(n);read(m);k=ceil(log2(n));
    for(int i=1;i<=n;i++)read(A[i]);
    for(int i=1;i<=m;i++)read(c[i]);
    for(int i=1;i<=k;i++)scanf("%s",s[i]+1);
/*
    for(int i=1;i<=n;i++)printf("%d ",A[i]);puts("");
    for(int i=1;i<=m;i++)printf("%d ",c[i]);puts("");
    for(int i=1;i<=k;i++)printf("%s\n",s[i]+1);
*/
    int _;read(_);
    while(_--)
    {
        int x[4];for(int i=0;i<4;i++)read(x[i]);
        for(int i=1;i<=n;i++)a[i]=A[i]^x[i%4];
        ll ans=0;
        for(int i=1;i<=m;i++)ans=ans^(solve(c[i])*i);
        printf("%lld\n",ans);
/*
        for(int i=1;i<=n;i++)printf("%d ",a[i]);puts("");
*/
    }
    return 0;
}
